RH bug 204621 - "GtkPrint" asks for "Letter" size paper when "A4" size
authorMatthias Clasen <matthiasc@src.gnome.org>
Wed, 21 May 2008 02:17:30 +0000 (02:17 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 21 May 2008 02:17:30 +0000 (02:17 +0000)
        was chosen

        Patch by Marek Kasik.

        * gtk/gtk.symbols:
        * gtk/gtkprinter.[hc]: Add gtk_printer_get_default_page_size.

        * gtk/gtkprintbackend.[hc]: Add fallback implementation.

        * modules/printbackends/file/gtkprintbackendfile.c:
        * modules/printbackends/cups/gtkprintbackendcups.c: Implement
        get_default_page_size.

        * gtk/gtkpagesetupunixdialog.c: When selecting a different printer,
        select its default paper size.

        * gtk/gtkprintunixdialog.c: If no explicit page setup has been set,
        use the printer default.

        * gtk/gtkprintoperation-unix.c: Don't create an empty page setup
        if we don't have a default page setup.

svn path=/trunk/; revision=20120

13 files changed:
ChangeLog
docs/reference/ChangeLog
docs/reference/gtk/gtk-sections.txt
gtk/gtk.symbols
gtk/gtkpagesetupunixdialog.c
gtk/gtkprintbackend.c
gtk/gtkprintbackend.h
gtk/gtkprinter.c
gtk/gtkprinter.h
gtk/gtkprintoperation-unix.c
gtk/gtkprintunixdialog.c
modules/printbackends/cups/gtkprintbackendcups.c
modules/printbackends/file/gtkprintbackendfile.c

index dec743a18d4dc033b589832ead984f615aa38f90..51b5cb2ec633bfefc1f350243e8ad788000030d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2008-05-20  Matthias Clasen  <mclasen@redhat.com>
+
+       RH bug 204621 - "GtkPrint" asks for "Letter" size paper when "A4" size
+       was chosen
+
+       Patch by Marek Kasik.
+
+       * gtk/gtk.symbols:
+       * gtk/gtkprinter.[hc]: Add gtk_printer_get_default_page_size.
+       
+       * gtk/gtkprintbackend.[hc]: Add fallback implementation.
+
+       * modules/printbackends/file/gtkprintbackendfile.c:
+       * modules/printbackends/cups/gtkprintbackendcups.c: Implement
+       get_default_page_size.
+
+       * gtk/gtkpagesetupunixdialog.c: When selecting a different printer,
+       select its default paper size.
+
+       * gtk/gtkprintunixdialog.c: If no explicit page setup has been set,
+       use the printer default.
+
+       * gtk/gtkprintoperation-unix.c: Don't create an empty page setup
+       if we don't have a default page setup.
+
 2008-05-20  Gian Mario Tagliaretti  <gianmt@gnome.org>
 
        * gtk/gtkdnd.c: (gtk_drag_set_icon_pixmap): Fix the docs, the mask param
index e4367f9d0863fa91e1fa377ccf374ed8832699ba..ee7cdf5d530ddb855a4fce772c98d1cac1c3102b 100644 (file)
@@ -1,3 +1,7 @@
+2008-05-20  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtk-sections.txt: Add gtk_printer_get_default_page_size
+
 2008-05-20  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 533761 - gdk_accelerator_parse() does not exist, should be
index 023f45818253a7c0cb799db43d3a98ef469e3275..2293778c01ff56b045178b1c028e168f6fa29e6c 100644 (file)
@@ -6435,6 +6435,7 @@ gtk_printer_compare
 gtk_printer_has_details
 gtk_printer_request_details
 gtk_printer_get_capabilities
+gtk_printer_get_default_page_size
 GtkPrinterFunc
 gtk_enumerate_printers
 
index 55dabbcbdcee35467054852fc65e31efcc2913ca..42b0a09ad12adc6e80104f81499312dd37e5715c 100644 (file)
@@ -2704,6 +2704,7 @@ gtk_printer_get_type G_GNUC_CONST
 gtk_printer_get_backend
 gtk_printer_get_name
 gtk_printer_get_description
+gtk_printer_get_default_page_size
 gtk_printer_get_state_message
 gtk_printer_get_location
 gtk_printer_get_icon_name
index 00b6da074a066fd1436d996c1cd3702730406d8f..8d9cbc787ed84d54091eec18be209c4af289230e 100644 (file)
@@ -681,8 +681,6 @@ fill_paper_sizes_from_printer (GtkPageSetupUnixDialog *dialog,
   GtkTreeIter iter;
   gint i;
 
-  current_page_setup = get_current_page_setup (dialog);
-  
   gtk_list_store_clear (priv->page_setup_list);
 
   if (printer == NULL)
@@ -720,6 +718,15 @@ fill_paper_sizes_from_printer (GtkPageSetupUnixDialog *dialog,
 
   fill_custom_paper_sizes (dialog);
   
+  current_page_setup = NULL;
+
+  /* When selecting a different printer, select its default paper size */
+  if (printer != NULL)
+    current_page_setup = gtk_printer_get_default_page_size (printer);
+
+  if (current_page_setup == NULL)
+    current_page_setup = get_current_page_setup (dialog);
+
   if (!set_paper_size (dialog, current_page_setup, FALSE, FALSE))
     set_paper_size (dialog, current_page_setup, TRUE, TRUE);
   
index 8be27d2f407f6889ba9b9f6f77ce577814a9f141..9b4e455208e286a24d07e55949f068d055b7b848 100644 (file)
@@ -283,16 +283,17 @@ gtk_print_backend_load_modules (void)
 
 G_DEFINE_TYPE (GtkPrintBackend, gtk_print_backend, G_TYPE_OBJECT)
 
-static void                 fallback_printer_request_details  (GtkPrinter          *printer);
-static gboolean             fallback_printer_mark_conflicts   (GtkPrinter          *printer,
-                                                              GtkPrinterOptionSet *options);
-static void                 fallback_printer_get_hard_margins (GtkPrinter          *printer,
-                                                              gdouble             *top,
-                                                              gdouble             *bottom,
-                                                              gdouble             *left,
-                                                              gdouble             *right);
-static GList *              fallback_printer_list_papers      (GtkPrinter          *printer);
-static GtkPrintCapabilities fallback_printer_get_capabilities (GtkPrinter          *printer);
+static void                 fallback_printer_request_details       (GtkPrinter          *printer);
+static gboolean             fallback_printer_mark_conflicts        (GtkPrinter          *printer,
+                                                                   GtkPrinterOptionSet *options);
+static void                 fallback_printer_get_hard_margins      (GtkPrinter          *printer,
+                                                                   gdouble             *top,
+                                                                   gdouble             *bottom,
+                                                                   gdouble             *left,
+                                                                   gdouble             *right);
+static GList *              fallback_printer_list_papers           (GtkPrinter          *printer);
+static GtkPageSetup *       fallback_printer_get_default_page_size (GtkPrinter          *printer);
+static GtkPrintCapabilities fallback_printer_get_capabilities      (GtkPrinter          *printer);
   
 static void
 gtk_print_backend_class_init (GtkPrintBackendClass *class)
@@ -308,6 +309,7 @@ gtk_print_backend_class_init (GtkPrintBackendClass *class)
   class->printer_mark_conflicts = fallback_printer_mark_conflicts;
   class->printer_get_hard_margins = fallback_printer_get_hard_margins;
   class->printer_list_papers = fallback_printer_list_papers;
+  class->printer_get_default_page_size = fallback_printer_get_default_page_size;
   class->printer_get_capabilities = fallback_printer_get_capabilities;
   
   g_type_class_add_private (class, sizeof (GtkPrintBackendPrivate));
@@ -419,6 +421,12 @@ fallback_printer_list_papers (GtkPrinter *printer)
   return NULL;
 }
 
+static GtkPageSetup *
+fallback_printer_get_default_page_size (GtkPrinter *printer)
+{
+  return NULL;
+}
+
 static GtkPrintCapabilities
 fallback_printer_get_capabilities (GtkPrinter *printer)
 {
index ea2f0f7d9b0eacb7934f53d59fd97229ec091471..81c549844a54725239c2afead291585647d7845c 100644 (file)
@@ -99,6 +99,7 @@ struct _GtkPrintBackendClass
                                                              GtkPrintSettings    *settings,
                                                              GtkPageSetup        *page_setup);
   GList  *              (*printer_list_papers)               (GtkPrinter          *printer);
+  GtkPageSetup *        (*printer_get_default_page_size)     (GtkPrinter          *printer);
   void                  (*printer_get_hard_margins)          (GtkPrinter          *printer,
                                                              double              *top,
                                                              double              *bottom,
@@ -123,7 +124,6 @@ struct _GtkPrintBackendClass
   void (*_gtk_reserved4) (void);
   void (*_gtk_reserved5) (void);
   void (*_gtk_reserved6) (void);
-  void (*_gtk_reserved7) (void);
 };
 
 GType   gtk_print_backend_get_type       (void) G_GNUC_CONST;
index 15c866f8a110bafb8096d8efdf188f359c382e02..1ce3ed55b1849be9113949e6105923c051b0396d 100644 (file)
@@ -832,6 +832,27 @@ gtk_printer_list_papers (GtkPrinter *printer)
   return backend_class->printer_list_papers (printer);
 }
 
+/**
+ * gtk_printer_get_default_page_size:
+ * @printer: a #GtkPrinter
+ * 
+ * Returns default page size of @printer.
+ * 
+ * Return value: a newly allocated #GtkPageSetup with default page size of the printer.
+ *
+ * Since: 2.13
+ */
+GtkPageSetup  *
+gtk_printer_get_default_page_size (GtkPrinter *printer)
+{
+  GtkPrintBackendClass *backend_class;
+
+  g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
+
+  backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
+  return backend_class->printer_get_default_page_size (printer);
+}
+
 void
 _gtk_printer_get_hard_margins (GtkPrinter *printer,
                               gdouble    *top,
index 2d8bec1f82c4e86bc95ad4559a1375a779de5f52..1152f88f6a040a92efa2fa86bcf441e30f7dfb89 100644 (file)
@@ -83,28 +83,29 @@ struct _GtkPrinterClass
   void (*_gtk_reserved7) (void);
 };
 
-GType                    gtk_printer_get_type          (void) G_GNUC_CONST;
-GtkPrinter              *gtk_printer_new               (const gchar     *name,
-                                                       GtkPrintBackend *backend,
-                                                       gboolean         virtual_);
-GtkPrintBackend         *gtk_printer_get_backend       (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_name          (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_state_message (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_description   (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_location      (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_icon_name     (GtkPrinter      *printer);
-gint                     gtk_printer_get_job_count     (GtkPrinter      *printer);
-gboolean                 gtk_printer_is_active         (GtkPrinter      *printer);
-gboolean                 gtk_printer_is_virtual        (GtkPrinter      *printer);
-gboolean                 gtk_printer_is_default        (GtkPrinter      *printer);
-gboolean                 gtk_printer_accepts_pdf       (GtkPrinter      *printer);
-gboolean                 gtk_printer_accepts_ps        (GtkPrinter      *printer);
-GList                   *gtk_printer_list_papers       (GtkPrinter      *printer);
-gint                     gtk_printer_compare           (GtkPrinter *a,
-                                                       GtkPrinter *b);
-gboolean                 gtk_printer_has_details       (GtkPrinter       *printer);
-void                     gtk_printer_request_details   (GtkPrinter       *printer);
-GtkPrintCapabilities     gtk_printer_get_capabilities  (GtkPrinter       *printer);
+GType                    gtk_printer_get_type              (void) G_GNUC_CONST;
+GtkPrinter              *gtk_printer_new                   (const gchar     *name,
+                                                           GtkPrintBackend *backend,
+                                                           gboolean         virtual_);
+GtkPrintBackend         *gtk_printer_get_backend           (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_name              (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_state_message     (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_description       (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_location          (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_icon_name         (GtkPrinter      *printer);
+gint                     gtk_printer_get_job_count         (GtkPrinter      *printer);
+gboolean                 gtk_printer_is_active             (GtkPrinter      *printer);
+gboolean                 gtk_printer_is_virtual            (GtkPrinter      *printer);
+gboolean                 gtk_printer_is_default            (GtkPrinter      *printer);
+gboolean                 gtk_printer_accepts_pdf           (GtkPrinter      *printer);
+gboolean                 gtk_printer_accepts_ps            (GtkPrinter      *printer);
+GList                   *gtk_printer_list_papers           (GtkPrinter      *printer);
+GtkPageSetup            *gtk_printer_get_default_page_size (GtkPrinter      *printer);
+gint                     gtk_printer_compare               (GtkPrinter *a,
+                                                           GtkPrinter *b);
+gboolean                 gtk_printer_has_details           (GtkPrinter       *printer);
+void                     gtk_printer_request_details       (GtkPrinter       *printer);
+GtkPrintCapabilities     gtk_printer_get_capabilities      (GtkPrinter       *printer);
 
 typedef gboolean (*GtkPrinterFunc) (GtkPrinter *printer,
                                    gpointer    data);
index be784380f86e1f89565996c347fd3c6c5f494d75..6b692d53605a2a51a7b15dda39b3e3271cdba450 100644 (file)
@@ -349,7 +349,6 @@ get_print_dialog (GtkPrintOperation *op,
 {
   GtkPrintOperationPrivate *priv = op->priv;
   GtkWidget *pd, *label;
-  GtkPageSetup *page_setup;
   const gchar *custom_tab_label;
 
   pd = gtk_print_unix_dialog_new (NULL, parent);
@@ -366,13 +365,8 @@ get_print_dialog (GtkPrintOperation *op,
     gtk_print_unix_dialog_set_settings (GTK_PRINT_UNIX_DIALOG (pd),
                                        priv->print_settings);
   if (priv->default_page_setup)
-    page_setup = gtk_page_setup_copy (priv->default_page_setup);
-  else
-    page_setup = gtk_page_setup_new ();
-
-  gtk_print_unix_dialog_set_page_setup (GTK_PRINT_UNIX_DIALOG (pd), 
-                                        page_setup);
-  g_object_unref (page_setup);
+    gtk_print_unix_dialog_set_page_setup (GTK_PRINT_UNIX_DIALOG (pd), 
+                                          priv->default_page_setup);
 
   g_signal_emit_by_name (op, "create-custom-widget",
                         &priv->custom_widget);
@@ -432,6 +426,10 @@ finish_print (PrintResponseData *rdata,
     {
       gtk_print_operation_set_print_settings (op, settings);
       priv->print_context = _gtk_print_context_new (op);
+
+      if ( (page_setup != NULL) && (gtk_print_operation_get_default_page_setup (op) == NULL))
+        gtk_print_operation_set_default_page_setup (op, page_setup);
+
       _gtk_print_context_set_page_setup (priv->print_context, page_setup);
 
       if (!rdata->do_preview)
index e9937a05692ffa5a19d3a2ff43ecd88300db827b..73ec0c42c0ec4d066ffbd0eb076ccb08bb47ba11 100644 (file)
@@ -133,6 +133,7 @@ struct GtkPrintUnixDialogPrivate
   GtkTreeModelFilter *printer_list_filter;
 
   GtkPageSetup *page_setup;
+  gboolean page_setup_set;
 
   GtkWidget *all_pages_radio;
   GtkWidget *current_page_radio;
@@ -407,6 +408,7 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog)
   priv->current_page = -1;
 
   priv->page_setup = gtk_page_setup_new ();
+  priv->page_setup_set = FALSE;
 
   g_signal_connect (dialog, 
                     "destroy", 
@@ -1440,6 +1442,20 @@ selected_printer_changed (GtkTreeSelection   *selection,
 
   if (printer != NULL)
     {
+      if (!priv->page_setup_set)
+       {
+         /* if no explicit page setup has been set, use the printer default */   
+         GtkPageSetup *page_setup;
+
+         page_setup = gtk_printer_get_default_page_size (printer);
+
+         if (!page_setup)
+           page_setup = gtk_page_setup_new ();
+
+         g_object_unref (priv->page_setup);
+         priv->page_setup = page_setup;
+       }
+
       priv->printer_capabilities = gtk_printer_get_capabilities (printer);
       priv->options = _gtk_printer_get_options (printer, 
                                                priv->initial_settings,
@@ -2650,6 +2666,8 @@ gtk_print_unix_dialog_set_page_setup (GtkPrintUnixDialog *dialog,
       g_object_unref (priv->page_setup);
       priv->page_setup = g_object_ref (page_setup);
 
+      priv->page_setup_set = TRUE;
+
       g_object_notify (G_OBJECT (dialog), "page-setup");
     }
 }
index 7277e42b211b8bce9b2897804c7b0c3e56f13cfe..5261e13c3e920d687c808a68eab1e927d283ee58 100644 (file)
@@ -136,6 +136,7 @@ static void                 cups_printer_prepare_for_print         (GtkPrinter
                                                                    GtkPrintSettings                  *settings,
                                                                    GtkPageSetup                      *page_setup);
 static GList *              cups_printer_list_papers               (GtkPrinter                        *printer);
+static GtkPageSetup *       cups_printer_get_default_page_size     (GtkPrinter                        *printer);
 static void                 cups_printer_request_details           (GtkPrinter                        *printer);
 static void                 cups_request_default_printer           (GtkPrintBackendCups               *print_backend);
 static void                 cups_request_ppd                       (GtkPrinter                        *printer);
@@ -255,6 +256,7 @@ gtk_print_backend_cups_class_init (GtkPrintBackendCupsClass *class)
   backend_class->printer_get_settings_from_options = cups_printer_get_settings_from_options;
   backend_class->printer_prepare_for_print = cups_printer_prepare_for_print;
   backend_class->printer_list_papers = cups_printer_list_papers;
+  backend_class->printer_get_default_page_size = cups_printer_get_default_page_size;
   backend_class->printer_get_hard_margins = cups_printer_get_hard_margins;
   backend_class->printer_get_capabilities = cups_printer_get_capabilities;
 }
@@ -1437,6 +1439,8 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend,
   /* let ppdOpenFd take over the ownership of the open file */
   g_io_channel_seek_position (data->ppd_io, 0, G_SEEK_SET, NULL);
   data->printer->ppd_file = ppdOpenFd (dup (g_io_channel_unix_get_fd (data->ppd_io)));
+
+  ppdMarkDefaults (data->printer->ppd_file);
   
   gtk_printer_set_has_details (printer, TRUE);
   g_signal_emit_by_name (printer, "details-acquired", TRUE);
@@ -3121,16 +3125,52 @@ cups_printer_prepare_for_print (GtkPrinter       *printer,
   print_job->rotate_to_orientation = TRUE;
 }
 
+static GtkPageSetup *
+create_page_setup (ppd_file_t *ppd_file,
+                  ppd_size_t *size)
+ {
+   char *display_name;
+   GtkPageSetup *page_setup;
+   GtkPaperSize *paper_size;
+   ppd_option_t *option;
+   ppd_choice_t *choice;
+
+  display_name = NULL;
+  option = ppdFindOption (ppd_file, "PageSize");
+  if (option)
+    {
+      choice = ppdFindChoice (option, size->name);
+      if (choice)
+       display_name = ppd_text_to_utf8 (ppd_file, choice->text);
+    }
+
+  if (display_name == NULL)
+    display_name = g_strdup (size->name);
+  
+  page_setup = gtk_page_setup_new ();
+  paper_size = gtk_paper_size_new_from_ppd (size->name,
+                                           display_name,
+                                           size->width,
+                                           size->length);
+  gtk_page_setup_set_paper_size (page_setup, paper_size);
+  gtk_paper_size_free (paper_size);
+  
+  gtk_page_setup_set_top_margin (page_setup, size->length - size->top, GTK_UNIT_POINTS);
+  gtk_page_setup_set_bottom_margin (page_setup, size->bottom, GTK_UNIT_POINTS);
+  gtk_page_setup_set_left_margin (page_setup, size->left, GTK_UNIT_POINTS);
+  gtk_page_setup_set_right_margin (page_setup, size->width - size->right, GTK_UNIT_POINTS);
+  
+  g_free (display_name);
+
+  return page_setup;
+}
+
 static GList *
 cups_printer_list_papers (GtkPrinter *printer)
 {
   ppd_file_t *ppd_file;
   ppd_size_t *size;
-  char *display_name;
   GtkPageSetup *page_setup;
-  GtkPaperSize *paper_size;
-  ppd_option_t *option;
-  ppd_choice_t *choice;
   GList *l;
   int i;
 
@@ -3142,33 +3182,9 @@ cups_printer_list_papers (GtkPrinter *printer)
   
   for (i = 0; i < ppd_file->num_sizes; i++)
     {
-      size = &ppd_file->sizes[i];
+      size = &ppd_file->sizes[i];      
 
-      display_name = NULL;
-      option = ppdFindOption (ppd_file, "PageSize");
-      if (option)
-       {
-         choice = ppdFindChoice (option, size->name);
-         if (choice)
-           display_name = ppd_text_to_utf8 (ppd_file, choice->text);
-       }
-      if (display_name == NULL)
-       display_name = g_strdup (size->name);
-
-      page_setup = gtk_page_setup_new ();
-      paper_size = gtk_paper_size_new_from_ppd (size->name,
-                                               display_name,
-                                               size->width,
-                                               size->length);
-      gtk_page_setup_set_paper_size (page_setup, paper_size);
-      gtk_paper_size_free (paper_size);
-
-      gtk_page_setup_set_top_margin (page_setup, size->length - size->top, GTK_UNIT_POINTS);
-      gtk_page_setup_set_bottom_margin (page_setup, size->bottom, GTK_UNIT_POINTS);
-      gtk_page_setup_set_left_margin (page_setup, size->left, GTK_UNIT_POINTS);
-      gtk_page_setup_set_right_margin (page_setup, size->width - size->right, GTK_UNIT_POINTS);
-       
-      g_free (display_name);
+      page_setup = create_page_setup (ppd_file, size);
 
       l = g_list_prepend (l, page_setup);
     }
@@ -3176,6 +3192,24 @@ cups_printer_list_papers (GtkPrinter *printer)
   return g_list_reverse (l);
 }
 
+static GtkPageSetup *
+cups_printer_get_default_page_size (GtkPrinter *printer)
+{
+  ppd_file_t *ppd_file;
+  ppd_size_t *size;
+  ppd_option_t *option;
+
+
+  ppd_file = gtk_printer_cups_get_ppd (GTK_PRINTER_CUPS (printer));
+  if (ppd_file == NULL)
+    return NULL;
+
+  option = ppdFindOption (ppd_file, "PageSize");
+  size = ppdPageSize (ppd_file, option->defchoice); 
+
+  return create_page_setup (ppd_file, size);
+}
+
 static void
 cups_printer_get_hard_margins (GtkPrinter *printer,
                               gdouble    *top,
index a83d5bc05d643f5ac4ab6723a1b34cca6f0ee567..58b787919c18db9735ba8a34efd6cb016aaa70e8 100644 (file)
@@ -104,6 +104,7 @@ static cairo_surface_t *    file_printer_create_cairo_surface      (GtkPrinter
                                                                    GIOChannel              *cache_io);
 
 static GList *              file_printer_list_papers               (GtkPrinter              *printer);
+static GtkPageSetup *       file_printer_get_default_page_size     (GtkPrinter              *printer);
 
 static void
 gtk_print_backend_file_register_type (GTypeModule *module)
@@ -182,6 +183,7 @@ gtk_print_backend_file_class_init (GtkPrintBackendFileClass *class)
   backend_class->printer_get_settings_from_options = file_printer_get_settings_from_options;
   backend_class->printer_prepare_for_print = file_printer_prepare_for_print;
   backend_class->printer_list_papers = file_printer_list_papers;
+  backend_class->printer_get_default_page_size = file_printer_get_default_page_size;
 }
 
 /* return N_FORMATS if no explicit format in the settings */
@@ -697,3 +699,11 @@ file_printer_list_papers (GtkPrinter *printer)
 
   return g_list_reverse (result);
 }
+
+static GtkPageSetup *
+file_printer_get_default_page_size (GtkPrinter *printer)
+{
+  GtkPageSetup *result = NULL;
+
+  return result;
+}